Snowflake上でのデータ変換処理の開発をGUIベースで行える「Coalesce」のQuickStartGuideを試してみた #SnowflakeDB
※本エントリは、Snowflakeをもっと使いこなそう! Advent Calendar 2022の23日目の記事となります。
さがらです。
Snowflake上でデータ変換処理の開発をGUIで行えるCoalesceのQuickStartGuideを試してみたので、その内容をまとめてみます。
Coalesceとは
Coalesceは、Snowflakeに特化したGUIのデータ変換処理のサービスです。
このツールの面白いところは、Snowflakeを用いた本格的なデータエンジニアリングに必要な以下のような機能をGUIベースで簡単に実装できる所にあります。具体的には、
- ストリームとタスクを自動的に生成したChange Data Captureの実装
- 自動的にVARIANT型のカラムからJSONを抽出して、生成されたテーブルの各列にフラット化
- Hubs、Links、Sat などの Data Vault オブジェクトを構築するためのすべての組み込みテンプレート
- FactsやDimensionsなどの基本的なディメンショナルモデリングのオブジェクトの実装 (Slowly Changing Dimension Type-2に対応)
といったことが出来るようです!
上述の内容は下記の記事からの引用なのですが、この記事の執筆者はSnowflake界隈では超有名人のKent Graziano氏であり、Coalesce社のStrategic Advisorも兼任しているようです!このバックグラウンドもあり、モデリング周りの機能が充実しているのかもしれないですねw
そんな強力なアドバイザーもいるCoalesceを、今回試してみました。
アカウント登録
では、早速Coalesceのアカウント登録から始めていきます。
Coalesceは、1ユーザーで試す分にはなんと無料で開始することができます!(ノード数などに制約があるため注意)
こちらのページに移動し、名前などの情報を入れてGet Started
を押します。
すると、下図のようなメールが届くはずです。概要として、「後でアカウントと初期パスワードの情報を送るよ、最大12時間かかるよ。12時間経過してもアカウント情報が来なかったらメールしてね」と書いてあります。
時差の関係もあると思いますが、私の場合は「約2時間」でアカウント情報が掲載されたメールが届きました!
Coalesceのログインページで、このアカウント情報を入力し、ログインします。
初めてログインすると、下図のようにWorkspaces
の画面が出てくると思います。この画面が出てくればOKです!
Quick Start Guideに沿って試してみる
ここからは、公式のQuick Start Guideに沿って、Coalesceがどんな事ができるのか、確かめてみます。
画面の確認
初めてログインすると、Workspaces
の画面が出てきます。Workspaceは、実際にCoalesceを使って開発を行ったり処理を実行する環境となります。
デフォルトで用意されているDEV
を選択してみます。
すると、Build
の画面が表示されました。Coalesceで開発を行う際は、このBuild
の画面を使用することになります。
参考までに、Deploy
画面では開発した処理を、別のQAや本番の環境にプッシュする際に使用する画面となります。
Snowflakeアカウントへの接続
続けて、Snowflakeのアカウントへ接続をしてみます。
CoalesceのBuild
の画面から、左下の歯車マークを押します。
Build Settings
のタブが開くので、Development Workspace
から、使用するWorkspaceの右上の編集マークを押します。
まずSettings
の画面で、Account
欄に対象のSnowflakeのアカウントのURLを入れます。
続けてUser Credentials
の画面で、Username
、Password
を入れます。Role
とWarehouse
も必要に応じて入力しておきましょう。Test Connection
で接続テストを行い、問題ないことが確認できたら、右下のSave
を押します。
これで、対象のWorkspaceとSnowflakeアカウントを連携することが出来ました!
使用するデータベース・スキーマの設定
続いて、変換元のデータベース・スキーマと出力先のデータベース・スキーマを設定していきます。
まず、出力先のデータベース・スキーマを設定するためのStorage Location
を定義します。
Build Settings
のタブにおいて、New Storage Location
を押します。
続いて、表示されたポップアップにおいて、NameをTARGET
と入力し、右下のCreate
を押します。
作成したTARGET
をデフォルトの出力先とするため、TARGET
の編集マークを押し、表示されたポップアップでSet default
を押します。
次に、変換元のデータベース・スキーマを定義するStorage LocationであるSRC
と、出力先のデータベース・スキーマを定義するStorage LocationであるTARGET
に対して、具体的にデータベースとスキーマを設定していきます。
Build Settings
のタブにおいてDevelopment Workspace
から、使用するWorkspaceの右上の編集マークを押します。
Storage Mappings
を押すと、SRC
とTARGET
に対して具体的にデータベースとスキーマを割り当てることが出来る画面が出てくるので、以下のように設定したあと、右下のSave
を押します。
SRC
- Quick Start Guideの設定に沿って、
SNOWFLAKE_SAMPLE_DATA
データベースのTPCH_SF1
スキーマを選択
- Quick Start Guideの設定に沿って、
TARGET
- 任意のデータベース・スキーマを選択(加工しデータが出力されるスキーマとなります。)
データ変換パイプラインを構築してみる
続いて、Coalesceを使ってデータ変換パイプラインを構築してみます!
Source Nodeの設定
データ変換する元となる「Source Node」を設定していきます。
画面左のNodes
をクリックしNodesの画面を開いた上で、右上の「+」マークからAdd Sources
を押します。
表示されたポップアップで、追加したいテーブルを全て選択し、右下のAdd [選択した数] sources
を押します。
すると、Node
とBrowser
タブにおいて、選択したテーブルが表示されました。
Stage Nodeの設定
続いて、Source Nodeから最低限の加工を行う「Stage Node」を設定します。試しにここでは、Nation
テーブルに対するStage Nodeを設定してみます。
Browser
タブにおいて、NATION
で右クリックし、Add Node
を押し、Stage
を押します。
すると、STG_NATION
というStage Nodeが作られ、その編集画面が開かれると思います。
画面右側のNode Properties
を押すと、このノードの出力先は先程作成したStorage LocationであるTARGET
になっていることがわかります。
ここで、一度試しにテーブルを作成してみます。画面下部のCreate
を押すと、対象のStage Nodeに該当するSTG_NATION
テーブルが作られます。
続いて、Run
を押してみます。Run
を押すと、対象のテーブルに対してデータがロードされます。
ただ、ここまでは何の加工も行っていませんので、少し加工処理を加えてみます。
画面上部にあるMapping
タブから、N_NAME
のTransform
列をダブルクリックし、LOWER({{SRC}})
と入力します。これは、N_NAME
の値を小文字に変換する、というシンプルな加工処理を加えております。
この状態で枠外をクリックすると、N_NAME
のTransform
列の値が、実際のSQLの構文に沿った形に変換されました。
この状態で、もう一度Run
を押してこのStage Nodeを実行してみます!すると、N_NAME
列が小文字に変換されたことがわかると思います。
「あれ、ここでRunしたら大文字のレコードと小文字のレコードがどちらもINSERTされてしまうのではないか?」と思い、Snowflakeの画面で履歴を確認してみましたが、対象のテーブルを一度TRUNCATEしてから、INSERTが行われていました。
ディメンションテーブルの作成
続いて、ディメンションテーブルを作成してみます。
なんと、Coalesceでは設定を少し行うだけSlowly Changing Dimension Type-2の形式で、ディメンションテーブルにおいて履歴データを保持することが可能です。
では、実際にやってみます。
まずはStage Nodeから作成していきます。Browser
タブにおいて、CUSTOMER
で右クリックし、Add Node
を押し、Stage
を押します。
ここでは、特別な加工を行わないため、Create
とRun
を続けて押し、テーブルの作成とデータロードを行います。
続いて、ディメンションテーブルを定義していきます。Browser
タブに戻り、STG_CUSTOMER
で右クリックし、Add Node
を押し、Dimension
を押します。
開かれたDIM_CUSTOMER
の編集画面で、画面右側のOptions
から、Business Key
において、C_CUSTKEY
を選択し、「>」を押して設定します。
この後、下図のように右側にC_CUSTKEY
が表示されていればOKです。
さらに続けて、画面右側のOptions
から、Change Tracking
において、C_ADDRESS
とC_PHONE
を選択し、「>」を押して設定します。
※このChange Tracking
が設定されていないとSlowly Changing Dimension Type-1として動作し、何かしらカラムが設定されているとSlowly Changing Dimension Type-2として動作するようです。
こちらも設定後、右側にC_ADDRESS
とC_PHONE
が表示されていればOKです。
では、実際にCreate
でテーブル作成を行い、Run
でデータロードを行います。
実際に作成されたテーブルを見てみると、下図のように履歴として管理するためのカラムが追加されていました!Slowly Changing Dimension Type-2の実装がここまで簡単に出来るのはありがたいですね。
ファクトテーブルの作成
では、このQuick Start Guideの最後として、ファクトテーブルを作成してみます。
まずはStage Nodeから作成していきます。Browser
タブに戻り、ORDERS
で右クリックし、Add Node
を押し、Stage
を押します。
簡易的にファクトテーブルとして用いるために、キーに該当するカラムと実際の値を持つカラム以外を除外します。具体的には、O_ORDERKEY
、O_CUSTKEY
、O_TOTALPRICE
の3つのカラムだけを残します。
Stage Nodesにおけるカラムの削除方法は、対象のカラムで右クリックをし、Delete Column
を押せばOKです。各カラムは、Ctrlキーなどで複数列まとめて選択も可能です。
下図のように3カラムだけになればOKです。
続いて、顧客情報に関するキー情報もファクトテーブルに含めるため、JOINの定義を行っていきます。
まず、画面左側から先程作成したDIM_CUSTOMER
をクリックし、下部に表示されたDIM_CUSTOMER_KEY
を、STG_ORDERS
のカラム一覧にドラッグ&ドロップで追加します。
STG_ORDERS
のJoin
タブに切り替えて、Generate Join
を押し、Copy to Editor
を押します。
すると、Editor欄にコピーされますが、元々記述されていたFROM {{ ref('SRC', 'ORDERS') }} "ORDERS"
が不要のため、こちらを削除します。
コピーした内容の中に/*COLUMN*/
という表記がありますが、このままではJOINに用いるキーが合致しないため、これをO_CUSTKEY
に書き換えます。
ここまで設定できたら、一度Create
とRun
を実行します。
続いて、ファクトテーブルを定義していきます。Browser
タブに戻り、STG_ORDERS
で右クリックし、Add Node
を押し、Fact
を押します。
FCT_ORDERS
の編集画面が開いたら、画面右側のOptions
から、Business Key
にO_ORDERKEY
を追加します。
この設定が出来たら、Create
とRun
を押して、ファクトテーブルを作成します。
実際にSnowflakeから確認してみると、O_ORDRRKEY
ごとに注文額が記録されたファクトテーブルが作られていました!
作成したファクトテーブルとディメンションテーブルをJOINするクエリの実行
では、サンプルクエリとして、これまでに作成したテーブルを用いて以下のクエリを実行します。事前にコンテキストの設定を忘れないように注意です。
select DIM.C_NAME CUSTOMER_NAME, sum(FCT.O_TOTALPRICE) TOTAL_PRICE from "FCT_ORDERS" FCT inner join "DIM_CUSTOMER" DIM on FCT.DIM_CUSTOMER_KEY = DIM.DIM_CUSTOMER_KEY group by DIM.C_NAME;
すると、このようにディメンションテーブルDIM_CUSTOMER
に記録されたCUSTOMER_NAME
ごとに、ファクトテーブルFCT_ORDERS
に記録されたO_TOTALPRICE
の合計値を示すTOTAL_PRICE
が表示されました!
最後に
Snowflake上でデータ変換処理の開発をGUIで行えるCoalesceのQuickStartGuideを試してみました。
環境を分けたり、簡単にSlowly Changing Dimension Type-2を実装したディメンションテーブルを作成できたり、本格的なデータエンジニアリングの運用にも使えそうなツールだと感じました!
他にも、Git連携機能など面白い機能がありそうですので、どこかで試してみたいと思います。